<!doctype html>
<html lang="en">

	<head>
		<meta charset="UTF-8" />
		<title>作业</title>
	</head>

	<body>
		<!--- 简述页面的结构组成?以及每部分功能?
		- 列举移动端开发时浏览器会遇到的几种常见兼容问题及解决方案?
		- 列举PC端前端开发时浏览器会遇到的几种常见兼容问题以及解决方案?
		- DOM对象与jQuery对象间的区别及如何转换?
		- 如何获取当前网页及浏览器的相关信息?
		- 什么是闭包, 使用闭包的优缺点概述?-->
		<p>
			&lt;!doctype html&gt; -- DOCTYPE声明 声明h5一下内容遵循h5编码格式进行编码;
			<br /> title 标题 --显示在网页标签上的网页标题
			<br /> head 网页头部 -- 头部内容是在浏览器中内容无法显示的，这里是给服务器、浏览器、链接外部JS、a链接CSS样式等区域
			<br /> body 网页编码区 -- 这里放置的内容就可以通过浏览器呈现给用户，其内容可以是table表格布局格式内容，也可以DIV布局的内容，也可以直接是文字。这里也是最主要区域，网页的内容呈现区
			<br />
		</p>
		<br />
		<p>
			1.iPhone下非a标签使用$.fn.on委托绑定没有作用。 　　处理方案，给标签加上cursor属性 .event{ cursor:pointer; } 2.移动端使用iframe加载跨域网页出现“Refused to display in a frame becuase it set 'X-Frame-Options' to 'SAMEORIGIN” 　　本人使用的跨域页面是移动官网"http://wap.10086.cn/",如果使用pc地址"http://www.10086.cn/"则不会发生此问题。 　　原因：出于安全考虑，有的网站屏蔽了外部iframe的调用，比如上面的移动的移动端网页wap,而移动pc端则没有屏蔽。 　　解决方案： 　　在网上找解决方案，但是没有找到真正有用的。有几个方法被网友认为可行，但是我这里也没有用，详见http://stackoverflow.com/questions/20498831/refused-to-display-in-a-frame-because-it-set-x-frame-options-to-sameorigin 　　如果支持前端来说，这个应该是没有解决方案的，毕竟要访问的网页不是自己的。唯一的办法是让后台的同事帮忙使用默认浏览器打开这个网站。 3. webview中 sumsung手机使用margin-left:auto;margin-right:auto;来实现水平居中会导致该居中元素的宽度设置失效，宽度会自动填满居中区域。 　　解决方案：定位+左距离50%+左偏移元素宽度的一半 .center{ position:relative; left:50%; margin-left:-100px; } 4.webview中 sumsung定义高度不起作用 　　解决方案：逼不得已使用padding撑起高度 5.webview中 sumsung margin-left不起作用 　　解决方案：逼不得已使用padding-left 6. webview中 iso input宽度置为0还是有显示区域。解决方法是“width:0px;z-index:-1;border:none”。 7.多行省略 　　单行省略比较简单 white-space:nowrap; text-overflow:ellipsis; overflow:hidden; 　　合适WebKit浏览器或移动端（绝大部分是WebKit内核的）浏览器 display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
		</p>
		<br />
		<p>
			浏览器兼容问题一：不同浏览器的标签默认的外补丁和内补丁不同 问题症状：随便写几个标签，不加样式控制的情况下，各自的margin 和padding差异较大。 碰到频率:100% 解决方案：css里 *{margin:0;padding:0;} 备注：这个是最常见的也是最易解决的一个浏览器兼容性问题，几乎所有的css文件开头都会用通配符*来设置各个标签的内外补丁是0。 浏览器兼容问题二：块属性标签float后，又有横行的margin情况下，在ie6显示margin比设置的大 问题症状:常见症状是ie6中后面的一块被顶到下一行 碰到频率：90%（稍微复杂点的页面都会碰到，float布局最常见的浏览器兼容问题） 解决方案：在float的标签样式控制中加入 display:inline;将其转化为行内属性 备注：我们最常用的就是div+css布局了，而div就是一个典型的块属性标签，横向布局的时候我们通常都是用div float实现的，横向的间距设置如果用margin实现，这就是一个必然会碰到的兼容性问题。 浏览器兼容问题三：设置较小高度标签（一般小于10px），在ie6，ie7，遨游中高度超出自己设置高度 问题症状：ie6、7和遨游里这个标签的高度不受控制，超出自己设置的高度 碰到频率：60% 解决方案：给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。 备注：这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是ie8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的，这个标签的高度还是会达到默认的行高。 浏览器兼容问题四：行内属性标签，设置display:block后采用float布局，又有横行的margin的情况，ie6间距bug（类似第二种） 问题症状：ie6里的间距比超过设置的间距 碰到几率：20% 解决方案：在display:block;后面加入display:inline;display:table; 备注：行内属性标签，为了设置宽高，我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后，在ie6下，他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签，所以我们再加上display:inline的话，它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。 浏览器兼容问题五：图片默认有间距 问题症状：几个img标签放在一起的时候，有些浏览器会有默认的间距，加了问题一中提到的通配符也不起作用。 碰到几率：20% 解决方案：使用float属性为img布局 备注：因为img标签是行内属性标签，所以只要不超出容器宽度，img标签都会排在一行里，但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。 浏览器兼容问题六：标签最低高度设置min-height不兼容 问题症状：因为min-height本身就是一个不兼容的css属性，所以设置min-height时不能很好的被各个浏览器兼容 碰到几率：5% 解决方案：如果我们要设置一个标签的最小高度200px，需要进行的设置为：{min-height:200px; height:auto !important; height:200px; overflow:visible;} 备注：在B/S系统前端开时，有很多情况下我们又这种需求。当内容小于一个值（如300px）时。容器的高度为300px；当内容高度大于这个值时，容器高度被撑高，而不是出现滚动条。这时候我们就会面临这个兼容性问题。 浏览器兼容问题七：透明度的兼容css设置 方法是：每写一小段代码（布局中的一行或者一块）我们都要在不同的浏览器中看是否兼容，当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的，只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话，就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。 /* css hack*/ 我很少使用hacker的，可能是个人习惯吧，我不喜欢写的代码ie不兼容，然后用hack来解决。不过hacker还是非常好用的。 使用hacker 我可以吧浏览器分为3类：ie6 ；ie7和遨游；其他（ie8 chrome ff safari opera等） ie6认识的hacker 是下划线_ 和星号 * ie7 遨游认识的hacker是星号 * （包括上面问题6中的 !important也算是hack的一种。不过实用性较小。） 比如这样一个css设置 height:300px;*height:200px;_height:100px; ie6浏览器在读到 height:300px的时候会认为高时300px；继续往下读，他也认识*heihgt， 所以当ie6读到*height:200px的时候会覆盖掉前一条的相冲突设置，认为高度是200px。继续往下读，ie6还认识_height,所以他又会覆盖掉200px高的设置，把高度设置为100px； ie7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了，因为它们不认识_height。所以它们会把高度解析为200px； 剩下的浏览器只认识第一个height:300px;所以他们会把高度解析为300px。 因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个，所以书写的次序是很重要的。 最后说一下，严谨型的开发人员会有一套合适自己的RESET.CSS。结合自己的经验尽量规避容易出现不兼容的问题。以减少hack的使用，尽量符合W3C的标准。
		</p>
		<br />
		<p>
			$(“字符串”)会返回满足条件的所有元素的一个数组,其中: 　　字符串以#开头,表示id; 　　字符串以.开头,表示CSS的class名; 　　若非以上两种情况,则改字符串表示标签名. 　　$(DOM对象)可以得到一个jQuery对象.
		</p>
		<br />
		<p>
			jQuery对象转成DOM对象： 两种转换方式将一个jQuery对象转换成DOM对象：[index]和.get(index); (1)jQuery对象是一个数据对象，可以通过[index]的方法，来得到相应的DOM对象。 如：var $v =$("#v") ; //jQuery对象 var v=$v[0]; //DOM对象 alert(v.checked) //检测这个checkbox是否被选中 (2)jQuery本身提供，通过.get(index)方法，得到相应的DOM对象 如：var $v=$("#v"); //jQuery对象 var v=$v.get(0); //DOM对象 alert(v.checked) //检测这个checkbox是否被选中 DOM对象转成jQuery对象: 对于已经是一个DOM对象，只需要用$()把DOM对象包装起来，就可以获得一个jQuery对象了。$(DOM对象) 如：var v=document.getElementById("v"); //DOM对象 var $v=$(v); //jQuery对象 转换后，就可以任意使用jQuery的方法了。 通过以上方法，可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是：DOM对象才能使用DOM中的方法，jQuery对象是不可以用DOM中的方法。
		</p>
		<br />
		<p>
			下面是其它的相关使用方法： 1、DOM对象转jQuery对象 普通的Dom对象一般可以通过$()转换成jQuery对象。 如：$(document.getElementById("msg")) 返回的就是jQuery对象，可以使用jQuery的方法。 2、jQuery对象转DOM对象 由于jQuery对象本身是一个集合。所以如果jQuery对象要转换为Dom对象则必须取出其中的某一项，一般可通过索引取出。 如： $("#msg")[0]，$("div").eq(1)[0]，$("div").get()[1]，$("td")[5]
		</p>
		<br />
		<p>
			设置或获取对象指定的文件名或路径。 alert(window.location.pathname) 设置或获取整个 URL 为字符串。 alert(window.location.href); 设置或获取与 URL 关联的端口号码。 alert(window.location.port) 设置或获取 URL 的协议部分。 alert(window.location.protocol) 设置或获取 href 属性中在井号“#”后面的分段。 alert(window.location.hash) 设置或获取 location 或 URL 的 hostname 和 port 号码。 alert(window.location.host) 设置或获取 href 属性中跟在问号后面的部分。 alert(window.location.search) 获取变量的值(截取等号后面的部分) var url = window.location.search; // alert(url.length); // alert(url.lastIndexOf('=')); var loc = url.substring(url.lastIndexOf('=')+1, url.length);
		</p>
		<br />
		<p>
			优点： 1. 逻辑连续，当闭包作为另一个函数调用的参数时，避免你脱离当前逻辑而单独编写额外逻辑。 2. 方便调用上下文的局部变量。 3. 加强封装性，第2点的延伸，可以达到对变量的保护作用。 缺点： 闭包有一个非常严重的问题，那就是内存浪费问题，这个内存浪费不仅仅因为它常驻内存，更重要的是，对闭包的使用不当会造成无效内存的产生，
		</p>
		<br />
		<p>
			闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中，只有函数内部的子函数才能读取局部变量，因此可以把闭包简单理解成“定义在一个函数内部的函数”。
		</p>
		<br />
	</body>

</html>